iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
IoT

30天入門智慧家庭系列 第 13

Day13 MQTT

  • 分享至 

  • xImage
  •  

MQTT簡介


MQTT (Message Queuing Telemetry Transport) 是由 IBM 的 Andy Stanford-Clark 和 Eurotech 的 Arlen Nipper 於 1999 年發明的通訊協定。目前主流的版本是 v3.1.1版本,而目前最新的版本是 v5.0。
MQTT 主要目的為在網路頻段窄、穩定性低的情況下使用的協定,建立在 TCP/IP 協定上,Header 僅兩個 Byte,相當適合物聯網使用。

MQTT 運作方式

MQTT 是透過 發布 (Publish) 與訂閱 (Subscribe) 的方式執行一對多的通訊。主要的腳色有:

  • Broker:MQTT 的中繼伺服器,負責將 Publisher 發佈的主題,傳給訂閱此主題的 Subscriber。
  • Publisher:發布訊息的用戶,負責發佈主題給 Broker。
  • Subscriber:接收訊息的用戶,跟 Broker 訂閱自己有興趣的主題,多個用戶可以訂閱同一個主題。

https://ithelp.ithome.com.tw/upload/images/20190929/20120058GvCgISMFVH.jpg

主題 Topic

MQTT 的主題是階層式的結構,使用的是 UTF-8 的編碼,透過/將每一層的主題分層。

例子:
myhome/groundfloor/livingroom/temperature
Germany/Bavaria/car/2382340923453/latitude

主要的限制有:

  • 區分大小寫
  • 不可用 #、$、+ 這三個符號
  • 至少要一個字符

另外,有以下兩個使用方式:

  • #
    取得 livingroom 下面所有的訂閱主題
    myhome/groundfloor/livingroom/#
    
  • +
    取得所有房間的溫度數值
    myhome/groundfloor/+/temperature
    

我們在定義主題時,有以下幾點可以遵循:

  • 主題名稱簡短、只使用 ASCII 字元
  • 將設備的唯一辨識名稱或 ID 加入主題中
  • 不要訂閱 # (全部主題)

服務品質 Qos

Qos ( Quality of Service ) 通訊時的服務品質,MQTT 將 Qos 分為三個等級:

  • 0: 最多一次傳送 (只負責傳送,發送過後就不管數據的傳送情況)
    當 Publisher 在發送訊息時,指定本次發送 Qos 為 0,則 Broker 可能會沒收到訊息;而 Broker 若有接到訊息,發佈給 Subscriber 時,Subscriber 也可能沒收到訊息。
  • 1: 至少一次傳送 (確認數據交付)
    當 Publisher 指定 Qos 為 1,Broker 收到訊息後會回傳 PUBACK Message 給 Publisher。Publisher 在發佈訊息後,若沒收到回傳的 PUBACK Message,一定時間後會再重新傳一次相同內容的訊息給 Broker (不論 Broker 是否有到訊息),也因此可能造成 Subscriber 收到的訊息重複。
  • 2: 正好一次傳送 (保證數據交付成功)
    當 Publisher 指定 Qos 為 2,Broker,為了避免發生 Qos 為 1 時,收到重複訊息的情況,Broker 與 Publisher 會進行兩次的來回確認才將訊息傳遞下去。
    詳細內容可以參考這裡

上一篇
Day12 ESP8266
下一篇
Day 14 實作智慧開關 - 硬體
系列文
30天入門智慧家庭15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言